const Router = require('koa-router')

module.exports = class Rest {
  constructor (model) {
    this.model = model
    this.router = new Router()
    this.init()
  }

  init () {
    /**
     * 单项数据查询
     */
    this.router.get('/', async ctx => {
      const data = await model.findOne(ctx.query)
      ctx.send(data, '已查询到符合条件的数据', '未查询到符合条件的数据')
    })

    /**
     * 列表数据查询
     */
    this.router.get('/list', async ctx => {
      const data = await model.find(ctx.query)
      ctx.send(data, '已查询到符合条件的数据', '未查询到符合条件的数据')
    })
    
    /**
     * 新增单条数据
     */
    this.router.post('/', async ctx => {
      const data = await model.create(ctx.request.body)
      ctx.send(data, '新增成功', '新增失败')
    })

    /**
     * 修改单条数据
     */
    this.router.put('/', async ctx => {
      const { _id } = ctx.body
      if (!_id) {
        ctx.fail(null, '数据_id无效，无法执行更改操作')
        return
      }
      const data = await model.updateOne({ _id: ctx._id }, ctx.body)
      ctx.send(data, '修改成功', '修改失败')
    })
  }

  add (action, method = 'get', path = '/') {
    this.router[method](path, action)
  }

  routes () {
    return this.router.routes()
  }
}

module.exports = function Rest (model) {
  const router = new Router()

  /**
   * 单项数据查询
   */
  router.get('/', async ctx => {
    const data = await model.findOne(ctx.query)
    ctx.send(data, '已查询到符合条件的数据', '未查询到符合条件的数据')
  })

  /**
   * 列表数据查询
   */
  router.get('/list', async ctx => {
    const data = await model.find(ctx.query)
    ctx.send(data, '已查询到符合条件的数据', '未查询到符合条件的数据')
  })
  
  /**
   * 新增单条数据
   */
  router.post('/', async ctx => {
    const data = await model.create(ctx.request.body)
    ctx.send(data, '新增成功', '新增失败')
  })

  /**
   * 修改单条数据
   */
  router.put('/', async ctx => {
    const { _id } = ctx.body
    if (!_id) {
      ctx.fail(null, '数据_id无效，无法执行更改操作')
      return
    }
    const data = await model.updateOne({ _id: ctx._id }, ctx.body)
    ctx.send(data, '修改成功', '修改失败')
  })

  return router.routes()
}